﻿// -----------------------------------------------------------------------
// <copyright file="VantagemFormModel.cs" company="Storytelling">
// TODO: Update copyright text.
// </copyright>
// -----------------------------------------------------------------------
namespace Storytelling.Modelos
{
    using System.ComponentModel.DataAnnotations;
    using System.Linq;
    using Storytelling.Entidades;
    using Storytelling.Utils;

    /// <summary>
    /// TODO: Update summary.
    /// </summary>
    public class VantagemFormModel : InativoFormModel<Vantagem>
    {
        public override long? Id
        {
            get { return base.Id; }
            set { base.Id = value; }
        }

        [Required]
        [Display(Name = "Descrição")]
        [StringLength(1000, MinimumLength = 5)]
        public virtual string Descricao
        {
            get { return Entidade.Descricao; }
            set { Entidade.Descricao = value; }
        }

        [Display(Name = "Disponível só na Criação?")]
        public virtual bool DisponivelNaCriacao
        {
            get { return Entidade.DisponivelNaCriacao.HasValue ? (bool)Entidade.DisponivelNaCriacao : false; }
            set { Entidade.DisponivelNaCriacao = value; }
        }

        [Display(Name = "Usado por Humano?")]
        public virtual bool UsadoPorHumano
        {
            get { return Entidade.UsadoPorHumano.HasValue ? (bool)Entidade.UsadoPorHumano : false; }
            set { Entidade.UsadoPorHumano = value; }
        }

        [Display(Name = "Usado por Vampiro?")]
        public virtual bool UsadoPorVampiro
        {
            get { return Entidade.UsadoPorVampiro.HasValue ? (bool)Entidade.UsadoPorVampiro : false; }
            set { Entidade.UsadoPorVampiro = value; }
        }

        #region PreRequisitos

        public virtual long[] VantagemPreRequisitosId
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.Id).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemCampo, long>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Id = valor;
                });
            }
        }

        [Display(Name = "Atributo/Habilidade")]
        public virtual int[] VantagemPreRequisitosCampo
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.Campo.HasValue ? (int)ent.Campo : 0).ToArray() : new int[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemCampo, int>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Campo = (Campo)valor;
                });
            }
        }

        [ArrayRange(0, default(int))]
        [Display(Name = "Nível")]
        public virtual int[] VantagemPreRequisitosValor
        {
            get
            {
                return Entidade.PreRequisitos != null ? Entidade.PreRequisitos.Select(ent => ent.Valor).ToArray() : new int[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemCampo, int>(value, ent => ent.PreRequisitos, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Valor = valor;
                });
            }
        } 

        #endregion

        #region Niveis

        [Display(Name = "Níveis")]
        public virtual long[] VantagemNivelId
        {
            get
            {
                return Entidade.Niveis != null ? Entidade.Niveis.Select(ent => ent.Id).ToArray() : new long[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemNivel, long>(value, ent => ent.Niveis, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Id = valor;
                });
            }
        }

        [ArrayRange(0, default(int))]
        [Display(Name = "Nível")]
        public virtual int[] VantagemNivelNiveis
        {
            get
            {
                return Entidade.Niveis != null ? Entidade.Niveis.Select(ent => ent.Nivel).ToArray() : new int[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemNivel, int>(value, ent => ent.Niveis, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Nivel = valor;
                });
            }
        }

        [Display(Name = "Nome")]
        public virtual string[] VantagemNivelNome
        {
            get
            {
                return Entidade.Niveis != null ? Entidade.Niveis.Select(ent => ent.Nome).ToArray() : new string[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemNivel, string>(value, ent => ent.Niveis, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Nome = valor;
                });
            }
        }

        [ArrayRange(1, "")]
        [Display(Name = "Descrição")]
        public virtual string[] VantagemNivelDescricao
        {
            get
            {
                return Entidade.Niveis != null ? Entidade.Niveis.Select(ent => ent.Descricao).ToArray() : new string[0];
            }
            set
            {
                Entidade.Transferidor<Vantagem, VantagemNivel, string>(value, ent => ent.Niveis, (valor, item) =>
                {
                    item.VantagemId = Entidade.Id;
                    item.Descricao = valor;
                });
            }
        } 

        #endregion
    }
}
